package cn.zane.service.weixin;

import cn.zane.domain.vo.WeixinTemplateMessageVO;
import cn.zane.domain.req.WeixinQrCodeReq;
import cn.zane.domain.res.WeixinQrCodeRes;
import cn.zane.domain.res.WeixinTokenRes;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;

/**
 * @Author: zane
 * @Date: 2025/04/05
 * @Description: 微信API服务 retrofit2
 */
public interface IWeixinApiService {

    /**
     * 获取 Access token
     * https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html
     *
     * @param grantType 获取access_token填写client_credential
     * @param appId     第三方用户唯一凭证
     * @param appSecret 第三方用户唯一凭证密钥，即appsecret
     * @return 响应结果
     */
    @GET("cgi-bin/token")
    Call<WeixinTokenRes> getToken(@Query("grant_type") String grantType,
                                  @Query("appid") String appId,
                                  @Query("secret") String appSecret);

    /**
     * 生成带参数的二维码（获取凭证ticket）
     * https://developers.weixin.qq.com/doc/offiaccount/Account_Management/Generating_a_Parametric_QR_Code.html
     *
     * @param accessToken     access_token
     * @param weixinQrCodeReq 获取微信登录生成带参数的二维码请求对象
     * @return 响应结果
     */
    @POST("cgi-bin/qrcode/create")
    Call<WeixinQrCodeRes> createQrCode(@Query("access_token") String accessToken,
                                       @Body WeixinQrCodeReq weixinQrCodeReq);


    /**
     * 发送微信公众号模板消息
     * https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html#%E5%8F%91%E9%80%81%E6%A8%A1%E6%9D%BF%E6%B6%88%E6%81%AF
     *
     * @param accessToken             access_token
     * @param weixinTemplateMessageVO 模板消息请求对象
     * @return 响应结果
     */
    @POST("cgi-bin/message/template/send")
    Call<Void> sendMessage(@Query("access_token") String accessToken,
                           @Body WeixinTemplateMessageVO weixinTemplateMessageVO);
}
